home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Gfx / Edit / TSMorph / src / TSMorph-prefs.c < prev    next >
C/C++ Source or Header  |  1994-10-30  |  39KB  |  1,512 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. // This code was written a bit quick and includes a
  21. // lot of hard coded stuff which should be #defined
  22.  
  23. // Include headers
  24. #include <proto/exec.h>
  25. #include <proto/gadtools.h>
  26. #include <proto/intuition.h>
  27. #include <proto/diskfont.h>
  28. #include <proto/graphics.h>
  29. #include <proto/utility.h>
  30. #include <proto/asl.h>
  31. #include <proto/icon.h>
  32. #include <proto/dos.h>
  33. #include <libraries/amigaguide.h>
  34. #include <clib/amigaguide_protos.h>
  35. #include <pragmas/amigaguide_pragmas.h>
  36. #define LIBRARIES_MATHFFP_H    // Do not include other math stuff
  37. #include <clib/alib_protos.h>
  38.  
  39. #include <stdio.h>
  40. #include <string.h>
  41. #include <stdlib.h>
  42.  
  43. #include <intuition/gadgetclass.h>
  44.  
  45. // following not in 2.02 headers
  46. #if INCLUDE_VERSION < 37
  47. LONG Stricmp(UBYTE *string1,UBYTE *string2);
  48. #pragma libcall UtilityBase Stricmp A2 9802
  49. #endif
  50.  
  51. #include "Prefs.h"
  52.  
  53. struct Library *GadToolsBase;
  54. struct Library *UtilityBase;
  55. struct Library *AslBase;
  56. struct Library *AmigaGuideBase;
  57.  
  58. struct FileRequester     *filereq        = NULL;
  59. char TempFilename[257];
  60. AMIGAGUIDECONTEXT         handle         = NULL;
  61. struct NewAmigaGuide        nag     = {NULL};
  62. ULONG                            ASig            = 0;
  63.  
  64. /* Version string for CLI version */
  65. char *Version = "$VER: TSMorph-prefs 3.0 (25.2.94)";
  66.  
  67. // Help nodes
  68. unsigned char *context[] = {
  69.     "",                    //    0
  70.     "Main",                // 1
  71.     "P-KEEPSETTINGS",    // 2
  72.     "P-CHANGEPALETTE",//    3
  73.     "P-CREATEICONS",    // 4
  74.     "P-CREATEICONSP",    // 5
  75.     "P-OPENMODE",        // 6
  76.     "P-PUBSCREEN",        // 7
  77.     "P-ZOOM",            // 8
  78.     "P-CREATEICONSR",    // 9
  79.     "P-DEPTH",            // 10
  80.     "P-DX",                // 11
  81.     "P-DY",                // 12
  82.     "P-LOADSCRIPT",    // 13
  83.     "P-MODE",            // 14
  84.     "P-POSTSCRIPT",    // 15
  85.     "P-PRESCRIPT",        // 16
  86.     "P-PUBSCREENR",    // 17
  87.     "P-QUALITY",        // 18
  88.     "P-SAVEFORMAT",    // 19
  89.     "P-ANTIALIAS",        // 20
  90.     "P-HELP",            // 21
  91.     "P-PREVIEW",        // 22
  92.     "P-CUSTOMMODE",    // 23
  93.     "P-CUSTOMDEPTH",    // 24
  94.     "TSMP-Close",        // 25
  95.     "TSMP-Depth",        // 26
  96.     "TSMP-Zoom",        // 27
  97.     "TSMorph-prefs",    // 28
  98.     "TSMP-Save",        // 29
  99.     "TSMP-Use",            // 30
  100.     "TSMP-Cancel",        // 31
  101.     "TSMP-men-Project",// 32
  102.     "TSMP-men-P-Open",// 33
  103.     "TSMP-men-P-SaveAs",// 34
  104.     "TSMP-men-P-Quit",// 35
  105.     "TSMP-men-Edit",    // 36
  106.     "TSMP-men-E-ResetD",//37
  107.     "TSMP-men-E-LastS",//38
  108.     "TSMP-men-E-Restore",//39
  109.     "TSMP-men-Settings",//40
  110.     "TSMP-men-S-Icons",//41
  111.     "TSMP-men",            //42
  112.     "P-INTEGER",        // 43
  113. };
  114.  
  115. // Settings
  116. STRPTR CustomScreen[100] = {"NONE",NULL};    // table of modes - headed by none
  117. ULONG CustomMode = 0;
  118. ULONG CustomDepth = 4;
  119. ULONG DX = 0;
  120. ULONG DY = 0;
  121. ULONG RenderMode = 0;
  122. ULONG SaveFormat = 0;
  123. ULONG Quality = 75;
  124. BOOL AntiAlias = FALSE;
  125. BOOL Integer = FALSE;
  126. ULONG Depth = 2;
  127. ULONG Zoom = 1;
  128. ULONG Palette = 0;
  129. ULONG OpenMode = 2;
  130. BOOL KeepPrefs = TRUE;
  131. BOOL Help = FALSE;
  132. BOOL ProjectI = TRUE;
  133. BOOL PrefsI = TRUE;
  134. BOOL RenderI = FALSE;
  135.  
  136. // Icons from this program
  137. BOOL Icons = TRUE;
  138.  
  139. // Prototypes
  140. void UpdateGadgets(void);
  141. void DisableWindow(void);
  142. void EnableWindow(void);
  143. void Error(char *ErrorMessage,char *extra);
  144. void SaveSettings(char *filename);
  145. void LoadSettings(char *filename);
  146. BOOL GetAFile(char *name,char *Prompt,ULONG flags);
  147. void InitParams(UBYTE *string);
  148. void help(ULONG helpnum);
  149.  
  150. // Is point in a rectangle
  151. #define PointInBox(x,y,mx,my,MX,MY) ((x>=mx)&&(y>=my)&&(x<=MX)&&(y<=MY))
  152.  
  153. struct List NodeList;            // Custom mode table
  154.  
  155. struct Node FirstNode = {0};
  156.  
  157. /* Disable CTRL-C checking    */
  158. int CXBRK(void) { return(0); }
  159. int chkabort(void) { return(0); }
  160. int __regargs __chkabort(void) { return(0); }
  161.  
  162. int
  163. main(void) {
  164.     int running = 1;
  165.     struct NameInfo buff;
  166.     ULONG id = INVALID_ID;
  167.     int kount = 1;
  168.     struct Node *MyNode;
  169.     struct AmigaGuideMsg *agm;
  170.     ULONG Signals;
  171.  
  172.     // Initialise Custom list and add "NONE"
  173.     NewList(&NodeList);
  174.     FirstNode.ln_Name = CustomScreen[0];
  175.     AddTail(&NodeList,&FirstNode);
  176.     // try and open amigaguide
  177.     if (AmigaGuideBase = OpenLibrary ("amigaguide.library", 34L)) {
  178.         nag.nag_BaseName        = "TSMorph";
  179.         nag.nag_Name            = "TSMorph.guide";
  180.         nag.nag_ClientPort    = "TSMorph-prefs_HELP";
  181.         nag.nag_Context        = context;
  182.         nag.nag_Flags            = HTF_NOACTIVATE;
  183.         nag.nag_PubScreen        = NULL;
  184.         if (handle = OpenAmigaGuideAsync(&nag, NULL)) {
  185.             ASig = AmigaGuideSignal(handle);
  186.         }
  187.     }
  188.     // Open various libraries
  189.     if (IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",37)) {
  190.         if (GadToolsBase = OpenLibrary("gadtools.library",37)) {
  191.             if (DiskfontBase = OpenLibrary("diskfont.library",36)) {
  192.                 if (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",37)) {
  193.                     // build up list of display modes (max ~100)
  194.                     id = NextDisplayInfo(id);
  195.                     while ((id != INVALID_ID) && (kount < 98)) {
  196.                         if (GetDisplayInfoData(NULL,(UBYTE *)&buff,sizeof(struct NameInfo),DTAG_NAME,id)) {
  197.                             if ((MyNode = (struct Node *)calloc(1,sizeof(struct Node))) &&
  198.                                  (CustomScreen[kount] = (STRPTR)strdup(buff.Name))) {
  199.                                 MyNode->ln_Name = CustomScreen[kount];
  200.                                 AddTail(&NodeList,MyNode);
  201.                                 kount++;
  202.                             }
  203.                         }
  204.                         id = NextDisplayInfo(id);
  205.                     }
  206.                     CustomScreen[kount] = NULL;
  207.                     // open other libraries
  208.                     if (UtilityBase = OpenLibrary("utility.library",37)) {
  209.                         if (AslBase = OpenLibrary("asl.library",37)) {
  210.                             if (IconBase = OpenLibrary("icon.library",37)) {
  211.                                 // get File requester and open window
  212.                                 if (filereq = (struct FileRequester *)AllocFileRequest()) {
  213.                                     if (!SetupScreen()) {
  214.                                         if (!OpenTSMorphPrefsWindow()) {
  215.                                             // Set up custom modes
  216.                                             GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomMode],TSMorphPrefsWnd,NULL,
  217.                                                 GTLV_Labels,&NodeList,
  218.                                                 TAG_END);
  219.                                             // Load settings from ENV:
  220.                                             LoadSettings("ENV:TSMorph/TSMorph.prefs");
  221.                                             // Loop until quit
  222.                                             while (running) {
  223.                                                 Signals = Wait((ASig) |
  224.                                                                     (1L << TSMorphPrefsWnd->UserPort->mp_SigBit));
  225.                                                 // amigaguide stuff
  226.                                                 if (Signals & ASig) {
  227.                                                     if (handle) {
  228.                                                         while (agm = GetAmigaGuideMsg(handle)) {
  229.                                                             switch (agm->agm_Type) {
  230.                                                             case ToolCmdReplyID:
  231.                                                                 break;
  232.                                                             case ToolStatusID:
  233.                                                                 break;
  234.                                                             default:
  235.                                                                 break;
  236.                                                             }
  237.                                                             ReplyAmigaGuideMsg(agm);
  238.                                                         }
  239.                                                     }
  240.                                                 }
  241.                                                 // Normal stuff
  242.                                                 if (Signals & (1L << TSMorphPrefsWnd->UserPort->mp_SigBit)) {
  243.                                                     running = HandleTSMorphPrefsIDCMP();
  244.                                                 }
  245.                                                 // Close everything down
  246.                                             }
  247.                                         }
  248.                                         CloseTSMorphPrefsWindow();
  249.                                     }
  250.                                     CloseDownScreen();
  251.                                     FreeFileRequest(filereq);
  252.                                 }
  253.                                 CloseLibrary(IconBase);
  254.                             }
  255.                             CloseLibrary(AslBase);
  256.                         }
  257.                         CloseLibrary(UtilityBase);
  258.                     }
  259.                     CloseLibrary((struct Library *)GfxBase);
  260.                 }
  261.                 CloseLibrary(DiskfontBase);
  262.             }
  263.             CloseLibrary(GadToolsBase);
  264.         }
  265.         CloseLibrary((struct Library *)IntuitionBase);
  266.     }
  267.     if (AmigaGuideBase) {
  268.         if (handle) {
  269.             CloseAmigaGuide(handle);
  270.         }
  271.         CloseLibrary(AmigaGuideBase);
  272.     }
  273.     return 0;
  274. }
  275.  
  276. /* Display help using amigaguide (if available)
  277.  * based on a number
  278.  */
  279. void
  280. help(ULONG helpnum) {
  281.     if (handle) {
  282.         SetAmigaGuideContext(handle,helpnum,NULL);
  283.         SendAmigaGuideContext(handle,NULL);
  284.     }
  285. }
  286.  
  287.  
  288. int
  289. CustomDepthClicked( void ) {
  290.     /* routine when gadget "Depth" is clicked. */
  291.     CustomDepth = TSMorphPrefsMsg.Code;
  292.     return 1;
  293. }
  294.  
  295. int
  296. DXClicked( void ) {
  297.     /* routine when gadget "DX" is clicked. */
  298.     DX = TSMorphPrefsMsg.Code;
  299.     return 1;
  300. }
  301.  
  302. int DYClicked( void ) {
  303.     /* routine when gadget "DY" is clicked. */
  304.     DY = TSMorphPrefsMsg.Code;
  305.     return 1;
  306. }
  307.  
  308. int
  309. ModeClicked( void ) {
  310.     /* routine when gadget "" is clicked. */
  311.     RenderMode = TSMorphPrefsMsg.Code;
  312.     return 1;
  313. }
  314.  
  315. int
  316. SaveFormatClicked( void ) {
  317.     /* routine when gadget "SAVEFORMAT" is clicked. */
  318.     SaveFormat = TSMorphPrefsMsg.Code;
  319.     // only enable Quality on JPEG and JPEGT
  320.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  321.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  322.                             TAG_END);
  323.     return 1;
  324. }
  325.  
  326. int
  327. QualityClicked( void ) {
  328.     /* routine when gadget "QUALITY" is clicked. */
  329.     Quality = TSMorphPrefsMsg.Code;
  330.     return 1;
  331. }
  332.  
  333. int
  334. AntiAliasClicked( void ) {
  335.     /* routine when gadget "AntiA" is clicked. */
  336.     AntiAlias = !AntiAlias;
  337.     return 1;
  338. }
  339.  
  340. int
  341. IntegerClicked( void ) {
  342.     /* routine when gadget "Int" is clicked. */
  343.     Integer = !Integer;
  344.     return 1;
  345. }
  346.  
  347. int
  348. DepthClicked( void ) {
  349.     /* routine when gadget "Depth" is clicked. */
  350.     Depth = TSMorphPrefsMsg.Code;
  351.     return 1;
  352. }
  353.  
  354. int
  355. ZoomClicked( void ) {
  356.     /* routine when gadget "Zoom" is clicked. */
  357.     Zoom = TSMorphPrefsMsg.Code;
  358.     return 1;
  359. }
  360.  
  361. int
  362. PaletteClicked( void ) {
  363.     /* routine when gadget "Palette" is clicked. */
  364.     Palette = TSMorphPrefsMsg.Code;
  365.     return 1;
  366. }
  367.  
  368. int
  369. OpenModeClicked( void ) {
  370.     /* routine when gadget "Mode" is clicked. */
  371.     OpenMode = TSMorphPrefsMsg.Code;
  372.     return 1;
  373. }
  374.  
  375. int
  376. HelpClicked( void ) {
  377.     /* routine when gadget "Help" is clicked. */
  378.     Help = !Help;
  379.     return 1;
  380. }
  381.  
  382. int
  383. KeepPrefsClicked( void ) {
  384.     /* routine when gadget "Prefs" is clicked. */
  385.     KeepPrefs = !KeepPrefs;
  386.     return 1;
  387. }
  388.  
  389. int
  390. ProjectClicked( void ) {
  391.     /* routine when gadget "Project" is clicked. */
  392.     ProjectI = !ProjectI;
  393.     return 1;
  394. }
  395.  
  396. int
  397. PrefsClicked( void ) {
  398.     /* routine when gadget "Prefs" is clicked. */
  399.     PrefsI = !PrefsI;
  400.     return 1;
  401. }
  402.  
  403. int
  404. RenderClicked( void ) {
  405.     /* routine when gadget "Render" is clicked. */
  406.     RenderI = !RenderI;
  407.     return 1;
  408. }
  409.  
  410. int
  411. SaveClicked( void ) {
  412.     /* routine when gadget "Save" is clicked. */
  413.     SaveSettings("ENVARC:TSMorph/TSMorph.prefs");
  414.     SaveSettings("ENV:TSMorph/TSMorph.prefs");
  415.     return 0;
  416. }
  417.  
  418. int
  419. UseClicked( void ) {
  420.     /* routine when gadget "Use" is clicked. */
  421.     SaveSettings("ENV:TSMorph/TSMorph.prefs");
  422.     return 0;
  423. }
  424.  
  425. int
  426. CancelClicked( void ) {
  427.     /* routine when gadget "Cancel" is clicked. */
  428.     // nothing
  429.     return 0;
  430. }
  431.  
  432. int
  433. CustomModeClicked( void ) {
  434.     /* routine when gadget "Custom Screen" is clicked. */
  435.     CustomMode = TSMorphPrefsMsg.Code;
  436.     return 1;
  437. }
  438.  
  439. int
  440. PreviewClicked( void ) {
  441.     /* routine when gadget "Preview" is clicked. */
  442.     // display help if required
  443.     if (TSMorphPrefsMsg.Code == 0x5F) {
  444.         help(22);
  445.     }
  446.     return 1;
  447. }
  448.  
  449. int
  450. LoadClicked( void ) {
  451.     /* routine when gadget "Load" is clicked. */
  452.     // display help if required
  453.     if (TSMorphPrefsMsg.Code == 0x5F) {
  454.         help(13);
  455.     }
  456.     return 1;
  457. }
  458.  
  459. int
  460. PreClicked( void ) {
  461.     /* routine when gadget "Pre" is clicked. */
  462.     // display help if required
  463.     if (TSMorphPrefsMsg.Code == 0x5F) {
  464.         help(16);
  465.     }
  466.     return 1;
  467. }
  468.  
  469. int
  470. PostClicked( void ) {
  471.     /* routine when gadget "Post" is clicked. */
  472.     // display help if required
  473.     if (TSMorphPrefsMsg.Code == 0x5F) {
  474.         help(15);
  475.     }
  476.     return 1;
  477. }
  478.  
  479. int
  480. MorphScreenClicked( void ) {
  481.     /* routine when gadget "TSMorph" is clicked. */
  482.     // display help if required
  483.     if (TSMorphPrefsMsg.Code == 0x5F) {
  484.         help(7);
  485.     }
  486.     return 1;
  487. }
  488.  
  489. int
  490. RenderScreenClicked( void ) {
  491.     /* routine when gadget "Render" is clicked. */
  492.     // display help if required
  493.     if (TSMorphPrefsMsg.Code == 0x5F) {
  494.         help(17);
  495.     }
  496.     return 1;
  497. }
  498.  
  499. int
  500. TSMorphPrefsOpen( void ) {
  501.     /* routine when (sub)item "Open..." is selected. */
  502.     LoadSettings(NULL);
  503.     return 1;
  504. }
  505.  
  506. int
  507. TSMorphPrefsSaveAs( void ) {
  508.     /* routine when (sub)item "Save As..." is selected. */
  509.     SaveSettings(NULL);
  510.     return 1;
  511. }
  512.  
  513. int
  514. TSMorphPrefsQuit( void ) {
  515.     /* routine when (sub)item "Quit" is selected. */
  516.     // nothing
  517.     return 0;
  518. }
  519.  
  520. int
  521. TSMorphPrefsResetToDefaults( void ) {
  522.     /* routine when (sub)item "Reset To Defaults" is selected. */
  523.     Zoom = 1;
  524.     Palette = 0;
  525.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  526.                             GTST_String,"",
  527.                             TAG_END);
  528.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  529.                             GTST_String,"",
  530.                             TAG_END);
  531.     ProjectI = TRUE;
  532.     RenderI = FALSE;
  533.     PrefsI = TRUE;
  534.     KeepPrefs = TRUE;
  535.     Help = FALSE;
  536.     OpenMode = 2;
  537.     SaveFormat = 0;
  538.     Quality = 75;
  539.     AntiAlias = FALSE;
  540.     Integer = FALSE;
  541.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  542.                             GTST_String,"Rexx/Prescript",
  543.                             TAG_END);
  544.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  545.                             GTST_String,"Rexx/Postscript",
  546.                             TAG_END);
  547.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  548.                             GTST_String,"Rexx/Loadscript",
  549.                             TAG_END);
  550.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  551.                             GTST_String,"Rexx/Preview",
  552.                             TAG_END);
  553.     DX = 0;
  554.     DY = 0;
  555.     Depth = 2;
  556.     RenderMode = 0;
  557.     CustomMode = 0;
  558.     CustomDepth = 4;
  559.     UpdateGadgets();
  560.     return 1;
  561. }
  562.  
  563. // Update gadgets based on current settings
  564. void
  565. UpdateGadgets(void) {
  566.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  567.                             GTSL_Level,CustomDepth,
  568.                             TAG_END);
  569.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  570.                             GTSL_Level,DX,
  571.                             TAG_END);
  572.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  573.                             GTSL_Level,DY,
  574.                             TAG_END);
  575.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  576.                             GTCY_Active,RenderMode,
  577.                             TAG_END);
  578.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  579.                             GTCY_Active,SaveFormat,
  580.                             TAG_END);
  581.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  582.                             GTSL_Level,Quality,
  583.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  584.                             TAG_END);
  585.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  586.                             GTCB_Checked,AntiAlias,
  587.                             TAG_END);
  588.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Integer],TSMorphPrefsWnd,NULL,
  589.                             GTCB_Checked,Integer,
  590.                             TAG_END);
  591.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  592.                             GTSL_Level,Depth,
  593.                             TAG_END);
  594.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  595.                             GTCY_Active,Zoom,
  596.                             TAG_END);
  597.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  598.                             GTCY_Active,Palette,
  599.                             TAG_END);
  600.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  601.                             GTCY_Active,OpenMode,
  602.                             TAG_END);
  603.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  604.                             GTCB_Checked,Help,
  605.                             TAG_END);
  606.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  607.                             GTCB_Checked,KeepPrefs,
  608.                             TAG_END);
  609.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  610.                             GTCB_Checked,ProjectI,
  611.                             TAG_END);
  612.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  613.                             GTCB_Checked,PrefsI,
  614.                             TAG_END);
  615.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  616.                             GTCB_Checked,RenderI,
  617.                             TAG_END);
  618.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomMode],TSMorphPrefsWnd,NULL,
  619.                             GTLV_Top,CustomMode,
  620.                             GTLV_Selected,CustomMode,
  621.                             TAG_END);
  622. }
  623.  
  624. int
  625. TSMorphPrefsLastSaved( void ) {
  626.     /* routine when (sub)item "Last Saved" is selected. */
  627.     LoadSettings("ENVARC:TSMorph/TSMorph.prefs");
  628.     return 1;
  629. }
  630.  
  631. int
  632. TSMorphPrefsRestore( void ) {
  633.     /* routine when (sub)item "Restore" is selected. */
  634.     LoadSettings("ENV:TSMorph/TSMorph.prefs");
  635.     return 1;
  636. }
  637.  
  638. int
  639. TSMorphPrefsCreateIcons( void ) {
  640.     /* routine when (sub)item "Create Icons?" is selected. */
  641.     Icons = !Icons;
  642.     return 1;
  643. }
  644.  
  645. int
  646. TSMorphPrefsCloseWindow( void ) {
  647.     /* routine for "IDCMP_CLOSEWINDOW". */
  648.     // nothing
  649.     return 0;
  650. }
  651.  
  652. int
  653. TSMorphPrefsRawKey(void) {
  654.     // Display help if 'Help' pressed
  655.     UWORD X,Y;
  656.     ULONG HNum;
  657.     switch (TSMorphPrefsMsg.Code) {
  658.     case 0x5F:
  659.         X = TSMorphPrefsWnd->MouseX;
  660.         Y = TSMorphPrefsWnd->MouseY;
  661.         if (PointInBox(X,Y,0,0,
  662.                         20,TSMorphPrefsWnd->BorderTop))
  663.             HNum = 25;
  664.         else
  665.         if (PointInBox(X,Y,(TSMorphPrefsWnd->Width - 24),0,
  666.                                 TSMorphPrefsWnd->Width,TSMorphPrefsWnd->BorderTop))
  667.             HNum = 26;
  668.         else
  669.         if (PointInBox(X,Y,(TSMorphPrefsWnd->Width - 24 - 24),0,
  670.                                 (TSMorphPrefsWnd->Width - 24),TSMorphPrefsWnd->BorderTop))
  671.             HNum = 27;
  672.         else
  673.         if (PointInBox(X,Y,Rect[GDX_CustomDepth].MinX,Rect[GDX_CustomDepth].MinY,
  674.                         Rect[GDX_CustomDepth].MaxX,Rect[GDX_CustomDepth].MaxY))
  675.             HNum = 24;
  676.         else
  677.         if (PointInBox(X,Y,Rect[GDX_DX].MinX,Rect[GDX_DX].MinY,
  678.                         Rect[GDX_DX].MaxX,Rect[GDX_DX].MaxY))
  679.             HNum = 11;
  680.         else
  681.         if (PointInBox(X,Y,Rect[GDX_DY].MinX,Rect[GDX_DY].MinY,
  682.                         Rect[GDX_DY].MaxX,Rect[GDX_DY].MaxY))
  683.             HNum = 12;
  684.         else
  685.         if (PointInBox(X,Y,Rect[GDX_Mode].MinX,Rect[GDX_Mode].MinY,
  686.                         Rect[GDX_Mode].MaxX,Rect[GDX_Mode].MaxY))
  687.             HNum = 14;
  688.         else
  689.         if (PointInBox(X,Y,Rect[GDX_SaveFormat].MinX,Rect[GDX_SaveFormat].MinY,
  690.                         Rect[GDX_SaveFormat].MaxX,Rect[GDX_SaveFormat].MaxY))
  691.             HNum = 19;
  692.         else
  693.         if (PointInBox(X,Y,Rect[GDX_Quality].MinX,Rect[GDX_Quality].MinY,
  694.                         Rect[GDX_Quality].MaxX,Rect[GDX_Quality].MaxY))
  695.             HNum = 18;
  696.         else
  697.         if (PointInBox(X,Y,Rect[GDX_AntiAlias].MinX,Rect[GDX_AntiAlias].MinY,
  698.                         Rect[GDX_AntiAlias].MaxX,Rect[GDX_AntiAlias].MaxY))
  699.             HNum = 20;
  700.         else
  701.         if (PointInBox(X,Y,Rect[GDX_Integer].MinX,Rect[GDX_Integer].MinY,
  702.                         Rect[GDX_Integer].MaxX,Rect[GDX_Integer].MaxY))
  703.             HNum = 43;
  704.         else
  705.         if (PointInBox(X,Y,Rect[GDX_Depth].MinX,Rect[GDX_Depth].MinY,
  706.                         Rect[GDX_Depth].MaxX,Rect[GDX_Depth].MaxY))
  707.             HNum = 10;
  708.         else
  709.         if (PointInBox(X,Y,Rect[GDX_Zoom].MinX,Rect[GDX_Zoom].MinY,
  710.                         Rect[GDX_Zoom].MaxX,Rect[GDX_Zoom].MaxY))
  711.             HNum = 8;
  712.         else
  713.         if (PointInBox(X,Y,Rect[GDX_Palette].MinX,Rect[GDX_Palette].MinY,
  714.                         Rect[GDX_Palette].MaxX,Rect[GDX_Palette].MaxY))
  715.             HNum = 3;
  716.         else
  717.         if (PointInBox(X,Y,Rect[GDX_OpenMode].MinX,Rect[GDX_OpenMode].MinY,
  718.                         Rect[GDX_OpenMode].MaxX,Rect[GDX_OpenMode].MaxY))
  719.             HNum = 6;
  720.         else
  721.         if (PointInBox(X,Y,Rect[GDX_Help].MinX,Rect[GDX_Help].MinY,
  722.                         Rect[GDX_Help].MaxX,Rect[GDX_Help].MaxY))
  723.             HNum = 21;
  724.         else
  725.         if (PointInBox(X,Y,Rect[GDX_KeepPrefs].MinX,Rect[GDX_KeepPrefs].MinY,
  726.                         Rect[GDX_KeepPrefs].MaxX,Rect[GDX_KeepPrefs].MaxY))
  727.             HNum = 2;
  728.         else
  729.         if (PointInBox(X,Y,Rect[GDX_Project].MinX,Rect[GDX_Project].MinY,
  730.                         Rect[GDX_Project].MaxX,Rect[GDX_Project].MaxY))
  731.             HNum = 4;
  732.         else
  733.         if (PointInBox(X,Y,Rect[GDX_Prefs].MinX,Rect[GDX_Prefs].MinY,
  734.                         Rect[GDX_Prefs].MaxX,Rect[GDX_Prefs].MaxY))
  735.             HNum = 5;
  736.         else
  737.         if (PointInBox(X,Y,Rect[GDX_Render].MinX,Rect[GDX_Render].MinY,
  738.                         Rect[GDX_Render].MaxX,Rect[GDX_Render].MaxY))
  739.             HNum = 9;
  740.         else
  741.         if (PointInBox(X,Y,Rect[GDX_Save].MinX,Rect[GDX_Save].MinY,
  742.                         Rect[GDX_Save].MaxX,Rect[GDX_Save].MaxY))
  743.             HNum = 29;
  744.         else
  745.         if (PointInBox(X,Y,Rect[GDX_Use].MinX,Rect[GDX_Use].MinY,
  746.                         Rect[GDX_Use].MaxX,Rect[GDX_Use].MaxY))
  747.             HNum = 30;
  748.         else
  749.         if (PointInBox(X,Y,Rect[GDX_Cancel].MinX,Rect[GDX_Cancel].MinY,
  750.                         Rect[GDX_Cancel].MaxX,Rect[GDX_Cancel].MaxY))
  751.             HNum = 31;
  752.         else
  753.         if (PointInBox(X,Y,Rect[GDX_CustomMode].MinX,Rect[GDX_CustomMode].MinY,
  754.                         Rect[GDX_CustomMode].MaxX,Rect[GDX_CustomMode].MaxY))
  755.             HNum = 23;
  756.         else
  757.         if (PointInBox(X,Y,Rect[GDX_Preview].MinX,Rect[GDX_Preview].MinY,
  758.                         Rect[GDX_Preview].MaxX,Rect[GDX_Preview].MaxY))
  759.             HNum = 22;
  760.         else
  761.         if (PointInBox(X,Y,Rect[GDX_Load].MinX,Rect[GDX_Load].MinY,
  762.                         Rect[GDX_Load].MaxX,Rect[GDX_Load].MaxY))
  763.             HNum = 13;
  764.         else
  765.         if (PointInBox(X,Y,Rect[GDX_Pre].MinX,Rect[GDX_Pre].MinY,
  766.                         Rect[GDX_Pre].MaxX,Rect[GDX_Pre].MaxY))
  767.             HNum = 16;
  768.         else
  769.         if (PointInBox(X,Y,Rect[GDX_Post].MinX,Rect[GDX_Post].MinY,
  770.                         Rect[GDX_Post].MaxX,Rect[GDX_Post].MaxY))
  771.             HNum = 15;
  772.         else
  773.         if (PointInBox(X,Y,Rect[GDX_MorphScreen].MinX,Rect[GDX_MorphScreen].MinY,
  774.                         Rect[GDX_MorphScreen].MaxX,Rect[GDX_MorphScreen].MaxY))
  775.             HNum = 7;
  776.         else
  777.         if (PointInBox(X,Y,Rect[GDX_RenderScreen].MinX,Rect[GDX_RenderScreen].MinY,
  778.                         Rect[GDX_RenderScreen].MaxX,Rect[GDX_RenderScreen].MaxY))
  779.             HNum = 17;
  780.         else
  781.             HNum = 28;
  782.         help(HNum);
  783.         break;
  784.     }
  785.     return 1;
  786. }
  787.  
  788. int
  789. TSMorphPrefsMenuHelp(void) {
  790.     // Help on a menu
  791.     ULONG HNum;
  792.     // start by reseting any changed menu items
  793.     ClearMenuStrip(TSMorphPrefsWnd);
  794.     if (Icons) {
  795.         (ItemAddress(TSMorphPrefsMenus,FULLMENUNUM(2,0,NOSUB)))->Flags |= CHECKED;
  796.     }
  797.     else {
  798.         (ItemAddress(TSMorphPrefsMenus,FULLMENUNUM(2,0,NOSUB)))->Flags &= ~CHECKED;
  799.     }
  800.     ResetMenuStrip(TSMorphPrefsWnd,TSMorphPrefsMenus);
  801.     // determine and display help node
  802.     switch (TSMorphPrefsMsg.Code) {
  803.     case FULLMENUNUM(0,NOITEM,NOSUB):
  804.     case FULLMENUNUM(0,2,NOSUB):
  805.         HNum = 32;
  806.         break;
  807.     case FULLMENUNUM(0,0,NOSUB):
  808.         HNum = 33;
  809.         break;
  810.     case FULLMENUNUM(0,1,NOSUB):
  811.         HNum = 34;
  812.         break;
  813.     case FULLMENUNUM(0,3,NOSUB):
  814.         HNum = 35;
  815.         break;
  816.     case FULLMENUNUM(1,NOITEM,NOSUB):
  817.         HNum = 36;
  818.         break;
  819.     case FULLMENUNUM(1,0,NOSUB):
  820.         HNum = 37;
  821.         break;
  822.     case FULLMENUNUM(1,1,NOSUB):
  823.         HNum = 38;
  824.         break;
  825.     case FULLMENUNUM(1,2,NOSUB):
  826.         HNum = 39;
  827.         break;
  828.     case FULLMENUNUM(2,NOITEM,NOSUB):
  829.         HNum = 40;
  830.         break;
  831.     case FULLMENUNUM(2,0,NOSUB):
  832.         HNum = 41;
  833.         break;
  834.     default:
  835.         HNum = 42;
  836.         break;
  837.     }
  838.     help(HNum);
  839.     return 1;
  840. }
  841.  
  842. extern USHORT __chip BusyPointerData[] =
  843. {
  844.     0x0000,0x0000,
  845.     0x0400,0x07C0,0x0000,0x07C0,0x0100,0x0380,0x0000,0x07E0,
  846.     0x07C0,0x1FF8,0x1FF0,0x3FEC,0x3FF8,0x7FDE,0x3FF8,0x7FBE,
  847.     0x7FFC,0xFF7F,0x7EFC,0xFFFF,0x7FFC,0xFFFF,0x3FF8,0x7FFE,
  848.     0x3FF8,0x7FFE,0x1FF0,0x3FFC,0x07C0,0x1FF8,0x0000,0x07E0,
  849.     0x0000,0x0000,
  850. };
  851.  
  852. struct Requester waitRequest;
  853.  
  854. void DisableWindow(void) {
  855.     InitRequester(&waitRequest);
  856.     Request(&waitRequest,TSMorphPrefsWnd);
  857.     SetPointer(TSMorphPrefsWnd, BusyPointerData, 16, 16, -6, 0);
  858. /* Does not actually disable the gadgets any more
  859.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  860.                             GA_Disabled,TRUE,
  861.                             TAG_END);
  862.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  863.                             GA_Disabled,TRUE,
  864.                             TAG_END);
  865.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  866.                             GA_Disabled,TRUE,
  867.                             TAG_END);
  868.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  869.                             GA_Disabled,TRUE,
  870.                             TAG_END);
  871.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  872.                             GA_Disabled,TRUE,
  873.                             TAG_END);
  874.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  875.                             GA_Disabled,TRUE,
  876.                             TAG_END);
  877.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  878.                             GA_Disabled,TRUE,
  879.                             TAG_END);
  880.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Integer],TSMorphPrefsWnd,NULL,
  881.                             GA_Disabled,TRUE,
  882.                             TAG_END);
  883.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  884.                             GA_Disabled,TRUE,
  885.                             TAG_END);
  886.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  887.                             GA_Disabled,TRUE,
  888.                             TAG_END);
  889.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  890.                             GA_Disabled,TRUE,
  891.                             TAG_END);
  892.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  893.                             GA_Disabled,TRUE,
  894.                             TAG_END);
  895.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  896.                             GA_Disabled,TRUE,
  897.                             TAG_END);
  898.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  899.                             GA_Disabled,TRUE,
  900.                             TAG_END);
  901.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  902.                             GA_Disabled,TRUE,
  903.                             TAG_END);
  904.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  905.                             GA_Disabled,TRUE,
  906.                             TAG_END);
  907.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  908.                             GA_Disabled,TRUE,
  909.                             TAG_END);
  910.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Save],TSMorphPrefsWnd,NULL,
  911.                             GA_Disabled,TRUE,
  912.                             TAG_END);
  913.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Use],TSMorphPrefsWnd,NULL,
  914.                             GA_Disabled,TRUE,
  915.                             TAG_END);
  916.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Cancel],TSMorphPrefsWnd,NULL,
  917.                             GA_Disabled,TRUE,
  918.                             TAG_END);
  919.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  920.                             GA_Disabled,TRUE,
  921.                             TAG_END);
  922.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  923.                             GA_Disabled,TRUE,
  924.                             TAG_END);
  925.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  926.                             GA_Disabled,TRUE,
  927.                             TAG_END);
  928.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  929.                             GA_Disabled,TRUE,
  930.                             TAG_END);
  931.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  932.                             GA_Disabled,TRUE,
  933.                             TAG_END);
  934.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  935.                             GA_Disabled,TRUE,
  936.                             TAG_END);
  937.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  938.                             GA_Disabled,TRUE,
  939.                             TAG_END);
  940. */
  941. }
  942.  
  943. void EnableWindow(void) {
  944.     EndRequest(&waitRequest,TSMorphPrefsWnd);
  945.     ClearPointer(TSMorphPrefsWnd);
  946. /* gadgets are not disabled anymore
  947.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_CustomDepth],TSMorphPrefsWnd,NULL,
  948.                             GA_Disabled,FALSE,
  949.                             TAG_END);
  950.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DX],TSMorphPrefsWnd,NULL,
  951.                             GA_Disabled,FALSE,
  952.                             TAG_END);
  953.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_DY],TSMorphPrefsWnd,NULL,
  954.                             GA_Disabled,FALSE,
  955.                             TAG_END);
  956.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Mode],TSMorphPrefsWnd,NULL,
  957.                             GA_Disabled,FALSE,
  958.                             TAG_END);
  959.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_SaveFormat],TSMorphPrefsWnd,NULL,
  960.                             GA_Disabled,FALSE,
  961.                             TAG_END);
  962.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Quality],TSMorphPrefsWnd,NULL,
  963.                             GA_Disabled, ((SaveFormat == 5)|(SaveFormat == 6))?FALSE:TRUE,
  964.                             TAG_END);
  965.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_AntiAlias],TSMorphPrefsWnd,NULL,
  966.                             GA_Disabled,FALSE,
  967.                             TAG_END);
  968.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Integer],TSMorphPrefsWnd,NULL,
  969.                             GA_Disabled,FALSE,
  970.                             TAG_END);
  971.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Depth],TSMorphPrefsWnd,NULL,
  972.                             GA_Disabled,FALSE,
  973.                             TAG_END);
  974.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Zoom],TSMorphPrefsWnd,NULL,
  975.                             GA_Disabled,FALSE,
  976.                             TAG_END);
  977.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Palette],TSMorphPrefsWnd,NULL,
  978.                             GA_Disabled,FALSE,
  979.                             TAG_END);
  980.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_OpenMode],TSMorphPrefsWnd,NULL,
  981.                             GA_Disabled,FALSE,
  982.                             TAG_END);
  983.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Help],TSMorphPrefsWnd,NULL,
  984.                             GA_Disabled,FALSE,
  985.                             TAG_END);
  986.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_KeepPrefs],TSMorphPrefsWnd,NULL,
  987.                             GA_Disabled,FALSE,
  988.                             TAG_END);
  989.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Project],TSMorphPrefsWnd,NULL,
  990.                             GA_Disabled,FALSE,
  991.                             TAG_END);
  992.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Prefs],TSMorphPrefsWnd,NULL,
  993.                             GA_Disabled,FALSE,
  994.                             TAG_END);
  995.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Render],TSMorphPrefsWnd,NULL,
  996.                             GA_Disabled,FALSE,
  997.                             TAG_END);
  998.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Save],TSMorphPrefsWnd,NULL,
  999.                             GA_Disabled,FALSE,
  1000.                             TAG_END);
  1001.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Use],TSMorphPrefsWnd,NULL,
  1002.                             GA_Disabled,FALSE,
  1003.                             TAG_END);
  1004.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Cancel],TSMorphPrefsWnd,NULL,
  1005.                             GA_Disabled,FALSE,
  1006.                             TAG_END);
  1007.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  1008.                             GA_Disabled,FALSE,
  1009.                             TAG_END);
  1010.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  1011.                             GA_Disabled,FALSE,
  1012.                             TAG_END);
  1013.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  1014.                             GA_Disabled,FALSE,
  1015.                             TAG_END);
  1016.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  1017.                             GA_Disabled,FALSE,
  1018.                             TAG_END);
  1019.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  1020.                             GA_Disabled,FALSE,
  1021.                             TAG_END);
  1022.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  1023.                             GA_Disabled,FALSE,
  1024.                             TAG_END);
  1025.     GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  1026.                             GA_Disabled,FALSE,
  1027.                             TAG_END);
  1028. */
  1029. }
  1030.  
  1031. // Save settings to a file
  1032. void
  1033. SaveSettings(char *filename) {
  1034.     char *ifilename = NULL;
  1035.     BPTR fh;
  1036.     BOOL ok=TRUE;
  1037.     char buffer[65];
  1038.     struct DiskObject *MyDiskObject;    // The Icon
  1039.     char *tstr;
  1040.     DisableWindow();
  1041.     if (!filename) {
  1042.         if (GetAFile("TSMorph.prefs","Save TSMorph Preferences",FILF_SAVE)) {
  1043.             ifilename = TempFilename;
  1044.         }
  1045.     }
  1046.     else {
  1047.         ifilename = filename;
  1048.     }
  1049.     if (ifilename) {
  1050.         if (fh = Open(ifilename,MODE_NEWFILE)) {
  1051.             FPuts(fh,";TSMorph parameters\n");
  1052.             FPuts(fh,"CREATEICONS=");
  1053.             FPuts(fh,ProjectI?"YES\n":"NO\n");
  1054.             FPuts(fh,"CHANGEPALETTE=");
  1055.             FPuts(fh,(Palette==2)?"OFF\n":(Palette?"NO\n":"YES\n"));
  1056.             FPuts(fh,"ZOOM=");
  1057.             FPuts(fh,(Zoom==2)?"OFF\n":(Zoom?"NO\n":"YES\n"));
  1058.             FPuts(fh,"OPENMODE=");
  1059.             switch (OpenMode) {
  1060.             case 0:
  1061.                 FPuts(fh,"IFILBM\n");
  1062.                 break;
  1063.             case 1:
  1064.                 FPuts(fh,"ALWAYS\n");
  1065.                 break;
  1066.             case 3:
  1067.                 FPuts(fh,"REMAP\n");
  1068.                 break;
  1069.             case 4:
  1070.                 FPuts(fh,"OPAL\n");
  1071.                 break;
  1072.             case 2:
  1073.             default:
  1074.                 FPuts(fh,"IFCOLOURS\n");
  1075.                 break;
  1076.             }
  1077.             if (*(tstr = GetString(TSMorphPrefsGadgets[GDX_MorphScreen]))) {
  1078.                 FPuts(fh,"PUBSCREEN=");
  1079.                 FPuts(fh,tstr);
  1080.                 FPuts(fh,"\n");
  1081.             }
  1082.             else {
  1083.                 FPuts(fh,";PUBSCREEN=\n");
  1084.             }
  1085.             if (CustomMode) {
  1086.                 FPuts(fh,"CUSTOMMODE=");
  1087.                 FPuts(fh,CustomScreen[CustomMode]);
  1088.                 FPuts(fh,"\n");
  1089.             }
  1090.             else {
  1091.                 FPuts(fh,";CUSTOMMODE=\n");
  1092.             }
  1093.             sprintf(buffer,"CUSTOMDEPTH=%ld\n",CustomDepth);
  1094.             FPuts(fh,buffer);
  1095.             FPuts(fh,"PREVIEW=");
  1096.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Preview]));
  1097.             FPuts(fh,"\n");
  1098.             FPuts(fh,"HELP=");
  1099.             FPuts(fh,Help?"YES\n":"NO\n");
  1100.             FPuts(fh,";Prefs parameters\n");
  1101.             FPuts(fh,"CREATEICONSP=");
  1102.             FPuts(fh,PrefsI?"YES\n":"NO\n");
  1103.             FPuts(fh,"KEEPSETTINGS=");
  1104.             FPuts(fh,KeepPrefs?"YES\n":"NO\n");
  1105.             FPuts(fh,";TSMorph-render parameters\n");
  1106.             FPuts(fh,"CREATEICONSR=");
  1107.             FPuts(fh,RenderI?"YES\n":"NO\n");
  1108.             sprintf(buffer,"DX=%ld\n",DX);
  1109.             FPuts(fh,buffer);
  1110.             sprintf(buffer,"DY=%ld\n",DY);
  1111.             FPuts(fh,buffer);
  1112.             FPuts(fh,"LOADSCRIPT=");
  1113.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Load]));
  1114.             FPuts(fh,"\n");
  1115.             FPuts(fh,"PRESCRIPT=");
  1116.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Pre]));
  1117.             FPuts(fh,"\n");
  1118.             FPuts(fh,"POSTSCRIPT=");
  1119.             FPuts(fh,GetString(TSMorphPrefsGadgets[GDX_Post]));
  1120.             FPuts(fh,"\n");
  1121.             sprintf(buffer,"DEPTH=%ld\n",Depth);
  1122.             FPuts(fh,buffer);
  1123.             sprintf(buffer,"MODE=%ld\n",RenderMode);
  1124.             FPuts(fh,buffer);
  1125.             FPuts(fh,"SAVEFORMAT=");
  1126.             switch (SaveFormat) {
  1127.             case 1:
  1128.                 FPuts(fh,"OPAL24\n");
  1129.                 break;
  1130.             case 2:
  1131.                 FPuts(fh,"OPAL24T\n");
  1132.                 break;
  1133.             case 3:
  1134.                 FPuts(fh,"OPAL24F\n");
  1135.                 break;
  1136.             case 4:
  1137.                 FPuts(fh,"OPAL24FT\n");
  1138.                 break;
  1139.             case 5:
  1140.                 FPuts(fh,"JPEG\n");
  1141.                 break;
  1142.             case 6:
  1143.                 FPuts(fh,"JPEGT\n");
  1144.                 break;
  1145.             case 7:
  1146.                 FPuts(fh,"PPM\n");
  1147.                 break;
  1148.             case 8:
  1149.                 FPuts(fh,"BW16\n");
  1150.                 break;
  1151.             case 9:
  1152.                 FPuts(fh,"BW256\n");
  1153.                 break;
  1154.             case 10:
  1155.                 FPuts(fh,"HAM6\n");
  1156.                 break;
  1157.             case 11:
  1158.                 FPuts(fh,"HAM8\n");
  1159.                 break;
  1160.             case 12:
  1161.                 FPuts(fh,"DCTV3\n");
  1162.                 break;
  1163.             case 13:
  1164.                 FPuts(fh,"DCTV4\n");
  1165.                 break;
  1166.             case 0:
  1167.             default:
  1168.                 FPuts(fh,"ILBM24\n");
  1169.                 break;
  1170.             }
  1171.             sprintf(buffer,"QUALITY=%ld\n",Quality);
  1172.             FPuts(fh,buffer);
  1173.             if (*(tstr = GetString(TSMorphPrefsGadgets[GDX_RenderScreen]))) {
  1174.                 FPuts(fh,"PUBSCREENR=");
  1175.                 FPuts(fh,tstr);
  1176.                 FPuts(fh,"\n");
  1177.             }
  1178.             else {
  1179.                 FPuts(fh,";PUBSCREENR=\n");
  1180.             }
  1181.             FPuts(fh,"ANTIALIAS=");
  1182.             FPuts(fh,AntiAlias?"YES\n":"NO\n");
  1183.             FPuts(fh,"INTEGER=");
  1184.             FPuts(fh,Integer?"YES\n":"NO\n");
  1185.             if (Icons) {
  1186.                 if (MyDiskObject = GetDiskObject(ifilename)) {
  1187.                     FreeDiskObject(MyDiskObject);
  1188.                 }
  1189.                 else {
  1190.                     if ((MyDiskObject = GetDiskObject("ENV:TSMorph/def_prefs")) ||
  1191.                         (MyDiskObject = GetDiskObject("ENV:SYS/def_prefs")) ||
  1192.                          (MyDiskObject = GetDefDiskObject(WBPROJECT))) {
  1193.                         PutDiskObject(ifilename,MyDiskObject);
  1194.                         FreeDiskObject(MyDiskObject);
  1195.                     }
  1196.                 }
  1197.             }
  1198.             if (!Close(fh)) {
  1199.                 ok = FALSE;
  1200.             }
  1201.         }
  1202.         else {
  1203.             ok = FALSE;
  1204.         }
  1205.     }
  1206.     if (!ok) {
  1207.         Error("Error Saving Preferences\n'%s'",ifilename);
  1208.     }
  1209.     // Why does this call UpdateGadgets()???
  1210.     UpdateGadgets();
  1211.     EnableWindow();
  1212. }
  1213.  
  1214. // Load settings from a file
  1215. void
  1216. LoadSettings(char *filename) {
  1217.     BPTR fh;
  1218.     BOOL ok=TRUE;
  1219.     char string[65];
  1220.     char *ifilename = NULL;
  1221.  
  1222.     DisableWindow();
  1223.     if (!filename) {
  1224.         if (GetAFile("TSMorph.prefs","Load TSMorph Preferences",0)) {
  1225.             ifilename = TempFilename;
  1226.         }
  1227.     }
  1228.     else {
  1229.         ifilename = filename;
  1230.     }
  1231.     if (ifilename) {
  1232.         TSMorphPrefsResetToDefaults();
  1233.         if (fh = Open(ifilename,MODE_OLDFILE)) {
  1234.             // If we have found a file the relevant lines
  1235.             while (FGets(fh,string,64)) {
  1236.                 // remove newline
  1237.                 string[strlen(string)-1] = '\0';
  1238.                 // ignore blank and comment lines
  1239.                 if (string[0] && (string[0]!=';')) {
  1240.                     // Clone settings in memory
  1241.                     InitParams(string);
  1242.                 }
  1243.             }
  1244.             Close(fh);
  1245.         }
  1246.         else {
  1247.             ok=FALSE;
  1248.         }
  1249.     }
  1250.     if (!ok) {
  1251.         Error("Error Loading Preferences\n'%s'",ifilename);
  1252.     }
  1253.     UpdateGadgets();
  1254.     EnableWindow();
  1255. }
  1256.  
  1257. /* Display an error message
  1258.  * ErrorMessage    : The main text
  1259.  * extra          : extra text
  1260.  */
  1261. void
  1262. Error(char *ErrorMessage,char *extra) {
  1263.     struct EasyStruct EasyStruct = {
  1264.         sizeof(struct EasyStruct),
  1265.         0,
  1266.         NULL,
  1267.         NULL,
  1268.         NULL
  1269.     };
  1270.     UBYTE *title = "TSMorph-prefs Error";
  1271.     EasyStruct.es_TextFormat = ErrorMessage;
  1272.     EasyStruct.es_Title = title;
  1273.     EasyStruct.es_GadgetFormat = "OK";
  1274.     EasyRequest(TSMorphPrefsWnd,&EasyStruct,NULL,extra);
  1275. }
  1276.  
  1277. /* Shows ASL file requester for a file
  1278.  * name    : current file name
  1279.  * Prompt: Title
  1280.  * flags    : e.g. for save flag
  1281.  * Returns: TRUE if file selected, name is TempFileName
  1282.  */
  1283. BOOL
  1284. GetAFile(char *name,char *Prompt,ULONG flags) {
  1285.     // Split of directory name
  1286.     strncpy(TempFilename,name,PathPart(name) - name);
  1287.     TempFilename[PathPart(name) - name] = 0;
  1288.     // Show requesters
  1289.     if (AslRequestTags((APTR) filereq,
  1290.                             ASL_Hail,(Tag) Prompt,
  1291.                             ASL_FuncFlags,flags,
  1292.                             ASL_Dir, (Tag) TempFilename,
  1293.                             ASL_File,(Tag) FilePart(name),
  1294.                             ASL_Window, TSMorphPrefsWnd,
  1295.                             TAG_DONE)) {
  1296.         // rejoin name
  1297.         strncpy(TempFilename,filereq->rf_Dir,256);
  1298.         AddPart(TempFilename,filereq->rf_File,256);
  1299.         return TRUE;
  1300.     }
  1301.     else {
  1302.         return FALSE;
  1303.     }
  1304. }
  1305.  
  1306. // Initialize settings values from parameters
  1307. void
  1308. InitParams(UBYTE *string) {
  1309.     UBYTE *s[2] = {NULL,NULL};
  1310.     char *s1;
  1311.     int kount;
  1312.  
  1313.     s[0] = string;
  1314.  
  1315.     if (s1 = FindToolType(s,"CREATEICONS")) {
  1316.         ProjectI = MatchToolValue(s1,"YES");
  1317.     }
  1318.     if (s1 = FindToolType(s,"CHANGEPALETTE")) {
  1319.         if (MatchToolValue(s1,"YES")) {
  1320.             Palette = 0;
  1321.         }
  1322.         else {
  1323.             if (MatchToolValue(s1,"OFF")) {
  1324.                 Palette = 2;
  1325.             }
  1326.             else {
  1327.                 Palette = 1;
  1328.             }
  1329.         }
  1330.     }
  1331.     if (s1 = FindToolType(s,"ZOOM")) {
  1332.         if (MatchToolValue(s1,"YES")) {
  1333.             Zoom = 0;
  1334.         }
  1335.         else {
  1336.             if (MatchToolValue(s1,"OFF")) {
  1337.                 Zoom = 2;
  1338.             }
  1339.             else {
  1340.                 Zoom = 1;
  1341.             }
  1342.         }
  1343.     }
  1344.     if (s1 = FindToolType(s,"OPENMODE")) {
  1345.         if (MatchToolValue(s1,"IFILBM")) {
  1346.             OpenMode = 0;
  1347.         }
  1348.         else {
  1349.             if (MatchToolValue(s1,"ALWAYS")) {
  1350.                 SaveFormat = 1;
  1351.             }
  1352.             else {
  1353.                 if (MatchToolValue(s1,"REMAP")) {
  1354.                     SaveFormat = 3;
  1355.                 }
  1356.                 else {
  1357.                     if (MatchToolValue(s1,"OPAL")) {
  1358.                         SaveFormat = 4;
  1359.                     }
  1360.                     else {
  1361.                         SaveFormat = 2;
  1362.                     }
  1363.                 }
  1364.             }
  1365.         }
  1366.     }
  1367.     if (s1 = FindToolType(s,"PUBSCREEN")) {
  1368.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_MorphScreen],TSMorphPrefsWnd,NULL,
  1369.                             GTST_String,s1,
  1370.                             TAG_END);
  1371.     }
  1372.     if (s1 = FindToolType(s,"CUSTOMMODE")) {
  1373.         CustomMode = 0;
  1374.         for (kount = 0;
  1375.               CustomScreen[kount];
  1376.               kount++) {
  1377.             if (!Stricmp(CustomScreen[kount],s1)) {
  1378.                 CustomMode = kount;
  1379.             }
  1380.         }
  1381.     }
  1382.     if (s1 = FindToolType(s,"CUSTOMDEPTH")) {
  1383.         StrToLong(s1,(LONG *)&CustomDepth);
  1384.     }
  1385.     if (s1 = FindToolType(s,"PREVIEW")) {
  1386.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Preview],TSMorphPrefsWnd,NULL,
  1387.                             GTST_String,s1,
  1388.                             TAG_END);
  1389.     }
  1390.     if (s1 = FindToolType(s,"HELP")) {
  1391.         Help = MatchToolValue(s1,"YES");
  1392.     }
  1393.     if (s1 = FindToolType(s,"CREATEICONSP")) {
  1394.         PrefsI = MatchToolValue(s1,"YES");
  1395.     }
  1396.     if (s1 = FindToolType(s,"KEEPSETTINGS")) {
  1397.         KeepPrefs = MatchToolValue(s1,"YES");
  1398.     }
  1399.     if (s1 = FindToolType(s,"CREATEICONSR")) {
  1400.         RenderI = MatchToolValue(s1,"YES");
  1401.     }
  1402.     if (s1 = FindToolType(s,"DX")) {
  1403.         StrToLong(s1,(LONG *)&DX);
  1404.     }
  1405.     if (s1 = FindToolType(s,"DY")) {
  1406.         StrToLong(s1,(LONG *)&DY);
  1407.     }
  1408.     if (s1 = FindToolType(s,"LOADSCRIPT")) {
  1409.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Load],TSMorphPrefsWnd,NULL,
  1410.                             GTST_String,s1,
  1411.                             TAG_END);
  1412.     }
  1413.     if (s1 = FindToolType(s,"PRESCRIPT")) {
  1414.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Pre],TSMorphPrefsWnd,NULL,
  1415.                             GTST_String,s1,
  1416.                             TAG_END);
  1417.     }
  1418.     if (s1 = FindToolType(s,"POSTSCRIPT")) {
  1419.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_Post],TSMorphPrefsWnd,NULL,
  1420.                             GTST_String,s1,
  1421.                             TAG_END);
  1422.     }
  1423.     if (s1 = FindToolType(s,"DEPTH")) {
  1424.         StrToLong(s1,(LONG *)&Depth);
  1425.     }
  1426.     if (s1 = FindToolType(s,"MODE")) {
  1427.         StrToLong(s1,(LONG *)&RenderMode);
  1428.     }
  1429.     if (s1 = FindToolType(s,"SAVEFORMAT")) {
  1430.         if (MatchToolValue(s1,"OPAL24")) {
  1431.             SaveFormat = 1;
  1432.         }
  1433.         else {
  1434.             if (MatchToolValue(s1,"OPAL24T")) {
  1435.                 SaveFormat = 2;
  1436.             }
  1437.             else {
  1438.                 if (MatchToolValue(s1,"OPAL24F")) {
  1439.                     SaveFormat = 3;
  1440.                 }
  1441.                 else {
  1442.                     if (MatchToolValue(s1,"OPAL24FT")) {
  1443.                         SaveFormat = 4;
  1444.                     }
  1445.                     else {
  1446.                         if (MatchToolValue(s1,"JPEG")) {
  1447.                             SaveFormat = 5;
  1448.                         }
  1449.                         else {
  1450.                             if (MatchToolValue(s1,"JPEGT")) {
  1451.                                 SaveFormat = 6;
  1452.                             }
  1453.                             else {
  1454.                                 if (MatchToolValue(s1,"PPM")) {
  1455.                                     SaveFormat = 7;
  1456.                                 }
  1457.                                 else {
  1458.                                     if (MatchToolValue(s1,"BW16")) {
  1459.                                         SaveFormat = 8;
  1460.                                     }
  1461.                                     else {
  1462.                                         if (MatchToolValue(s1,"BW256")) {
  1463.                                             SaveFormat = 9;
  1464.                                         }
  1465.                                         else {
  1466.                                             if (MatchToolValue(s1,"HAM6")) {
  1467.                                                 SaveFormat = 10;
  1468.                                             }
  1469.                                             else {
  1470.                                                 if (MatchToolValue(s1,"HAM8")) {
  1471.                                                     SaveFormat = 11;
  1472.                                                 }
  1473.                                                 else {
  1474.                                                     if (MatchToolValue(s1,"DCTV3")) {
  1475.                                                         SaveFormat = 12;
  1476.                                                     }
  1477.                                                     else {
  1478.                                                         if (MatchToolValue(s1,"DCTV4")) {
  1479.                                                             SaveFormat = 13;
  1480.                                                         }
  1481.                                                         else {
  1482.                                                             SaveFormat = 0;
  1483.                                                         }
  1484.                                                     }
  1485.                                                 }
  1486.                                             }
  1487.                                         }
  1488.                                     }
  1489.                                 }
  1490.                             }
  1491.                         }
  1492.                     }
  1493.                 }
  1494.             }
  1495.         }
  1496.     }
  1497.     if (s1 = FindToolType(s,"QUALITY")) {
  1498.         StrToLong(s1,(LONG *)&Quality);
  1499.     }
  1500.     if (s1 = FindToolType(s,"PUBSCREENR")) {
  1501.         GT_SetGadgetAttrs(TSMorphPrefsGadgets[GDX_RenderScreen],TSMorphPrefsWnd,NULL,
  1502.                             GTST_String,s1,
  1503.                             TAG_END);
  1504.     }
  1505.     if (s1 = FindToolType(s,"ANTIALIAS")) {
  1506.         AntiAlias = MatchToolValue(s1,"YES");
  1507.     }
  1508.     if (s1 = FindToolType(s,"INTEGER")) {
  1509.         Integer = MatchToolValue(s1,"YES");
  1510.     }
  1511. }
  1512.